<?php
/**
 * 汇友科技
 * @copyright (c) 2017 http://www.huiyou365.net All rights reserved.
 * @author: Creatint <creatint@163.com>
 */


define('YOTAKU_AUTH_KEY','a8&df/fjsk@!sfdDKF324');

/**
 * 基于网站入口文件(index.php)位置的插件路径
 */
const YO_ADDON_PATH = '../Addons/';


/**
 * 系统非常规MD5加密方法
 * @param  string $str 要加密的字符串
 * @return string
 */
function yotaku_md5($str = '', $key = YOTAKU_AUTH_KEY){
    return '' === $str ? '' : md5(sha1($str) . $key);
}

/**
 * 数据签名认证
 * @param  array  $data 被认证的数据
 * @return string       签名
 */
function data_auth_sign($data) {
    //数据类型检测
    if(!is_array($data)){
        $data = (array)$data;
    }
    ksort($data); //排序
    $code = http_build_query($data); //url编码并生成query字符串
    $sign = sha1($code); //生成签名
    return $sign;
}

/**
 * 检测用户是否登录
 * @return integer 0-未登录，大于0-当前登录用户ID
 */
function is_login(){
    $user = session('user_auth');
    if (empty($user)) {
        return 0;
    } else {
        return session('user_auth_sign') == data_auth_sign($user) ? $user['uid'] : 0;
    }
}


/**
 * 把年度审查情况json字符串转化为数组.
 *
 * @param $status_json string 年度审查情况json字符串
 * @return array|null
 */
function item_status($status_json, $all = true){

    if ( !is_string($status_json) )
        return null;

    $status = json_decode($status_json,true);

    if ( !is_array($status) ) {
        return null;
    } else {
        $status = array_2_sort($status, 'year', 'SORT_DESC', 'SORT_NUMERIC');
    }


    if ( !$all ) {
        $result[0]   =   $status[0];
    } else {
        $result = $status;
    }

    return $result;
}


/**
 * 二维数组排序.
 * @author Creatint
 *
 * @param $array array 需要排序的数组
 * @param $field string 需要排序的字段
 * @param string $sort 排序方式
 * @param string $sort 排序方式
 * @return array|null
 */
function array_2_sort($array, $field, $sort = 'SORT_DESC', $type = 'SORT_NUMERIC'){

    // 取出需要排序的那一列
    $arr_sort = array();

    if ( !is_array($array) )
        return null;

    foreach ( $array as $id => $row ) {

        if ( !is_array($row) )
            continue;

        $arr_sort[] = $row[$field];
    }

    array_multisort($arr_sort, constant($sort), constant($type), $array);

    return $array;
}


/**
 * 对分页实例进行设置.
 *
 * @param $Page Think\Page 分页实例
 * @return null|string 分页html字符串
 */
function show_page($Page){
    if( !($Page instanceof Think\Page) ){
        return null;
    }
    $Page
        ->setConfig('type',C('PAGE_TYPE'))
        ->setConfig('first', C('PAGE_FIRST'))
        ->setConfig('last', C('PAGE_LAST'))
        ->setConfig('prev', C('PAGE_PREV'))
        ->setConfig('next', C('PAGE_NEXT'))
        ->setConfig('class_active', C('PAGE_CLASS_ACTIVE'))   // 当前按钮的样式
        ->setConfig('tag_parent',null)  // 分页组件的父级标签值为空
        ->setConfig('theme','%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END%');

    return $Page->show();
}


function search($str, $key){
    return str_replace($key, "<span style='display: inline;font-size: 14px;color: #ea0000;'>{$key}</span>", $str);
}



/**
 * 检查$pos(推荐位的值)是否包含指定推荐位$contain
 * @param number $pos 推荐位的值
 * @param number $contain 指定推荐位
 * @return boolean true 包含 ， false 不包含
 * @author huajie <banhuajie@163.com>
 */
function check_position($pos = 0, $contain = 0){
    if(empty($pos) || empty($contain)){
        return false;
    }

    //将两个参数进行按位与运算，不为0则表示$contain属于$pos
    $res = $pos & $contain;
    if($res !== 0){
        return true;
    }else{
        return false;
    }
}

/**
 * select返回的数组进行整数映射转换
 *
 * @param array $map  映射关系二维数组  array(
 *                                          '字段名1'=>array(映射关系数组),
 *                                          '字段名2'=>array(映射关系数组),
 *                                           ......
 *                                       )
 * @author 朱亚杰 <zhuyajie@topthink.net>
 * @return array
 *
 *  array(
 *      array('id'=>1,'title'=>'标题','status'=>'1','status_text'=>'正常')
 *      ....
 *  )
 *
 */
function int_to_string(&$data,$map=array('status'=>array(1=>'正常',-1=>'删除',0=>'禁用',2=>'未审核',3=>'草稿'))) {
    if($data === false || $data === null ){
        return $data;
    }
    $data = (array)$data;
    foreach ($data as $key => $row){
        foreach ($map as $col=>$pair){
            if(isset($row[$col]) && isset($pair[$row[$col]])){
                $data[$key][$col.'_text'] = $pair[$row[$col]];
            }
        }
    }
    return $data;
}



/**
 * 把返回的数据集转换成Tree
 * @param array $list 要转换的数据集
 * @param string $pid parent标记字段
 * @param string $level level标记字段
 * @return array
 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
 */
function list_to_tree($list, $pk='id', $pid = 'pid', $child = '_child', $root = 0) {
    // 创建Tree
    $tree = array();
    if(is_array($list)) {
        // 创建基于主键的数组引用
        $refer = array();
        foreach ($list as $key => $data) {
            $refer[$data[$pk]] =& $list[$key];
        }
        foreach ($list as $key => $data) {
            // 判断是否存在parent
            $parentId =  $data[$pid];
            if ($root == $parentId) {
                $tree[] =& $list[$key];
            }else{
                if (isset($refer[$parentId])) {
                    $parent =& $refer[$parentId];
                    $parent[$child][] =& $list[$key];
                }
            }
        }
    }
    return $tree;
}


/**
 * 检测当前用户是否为管理员
 * @return boolean true-管理员，false-非管理员
 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
 */
function is_administrator($uid = null){
    $uid = is_null($uid) ? is_login() : $uid;
    return $uid && (intval($uid) === C('ADMINISTRATOR'));
}


function status_solve($item, $num = 0)
{
    $status = C('ITEM_STATUS');
    $item['check_records'] = json_decode($item['status_json'], true);
    $i = 1;
    foreach ($item['check_records'] as &$record) {
        if ($num > 0 && $i > $num) {
            break;
        }
        $record['text'] = "{$record['year']}年度审核情况： <span class='status status-{$record['status']}'>{$status[$record['status']]}</span><br>";
        $i++;
    }
    unset($record);
    return $item;
}

function getDistricts(){
    // TODO:优化
    $districts = D('District')->get($query = null, $field = true, $order = '', $showPage = false);
	//$districts = M()->table([C('DB_PREFIX').'district'=>'a', C('DB_PREFIX').'item'=>'b'])->field('a.*,count(b.id) as item_num')->where('b.did=a.id')->select();
	//$districts = M('District')->alias('a')->join(C('DB_PREFIX').'item b on b.did=a.id','left')->order('a.id desc')->select();
	//dump(M()->getLastSql());
	//dump($districts);

    return $districts;
}


function getGroup($uid){
    $group_ids = [];
    $text = '';
    $groups = M('AuthGroup')->where( array('status'=>array('egt','0'),'module'=>'admin','type'=>Admin\Model\AuthGroupModel::TYPE_ADMIN) )
        ->getfield('id,id,title,rules');
    $group_access = D('AuthGroupAccess')->select();
    foreach ($group_access as $access) {
        if ($access['uid'] == $uid) {
            $group_ids[] = $access['uid'];
            $text .= $groups[$access['group_id']]['title'].',';
        }
    }
    $text = trim($text, ',');
    return $text;
}
